{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Improving Linear Regression with Neural Networks (Logistic Regression)\n",
    "\n",
    "This function shows how to use TensorFlow to solve logistic regression with a multiple layer neural network\n",
    " $\\textbf{y} = sigmoid(\\textbf{A}_{3} \\times sigmoid(\\textbf{A}_{2} \\times sigmoid(\\textbf{A}_{1} \\times \\textbf{x} + \\textbf{b}_{1}) + \\textbf{b}_{2}) + \\textbf{b}_{3})$\n",
    "\n",
    "We will use the low birth weight data, specifically:\n",
    "```\n",
    "  y = 0 or 1 = low birth weight\n",
    "  x = demographic and medical history data\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "import requests\n",
    "import os.path\n",
    "import csv\n",
    "from tensorflow.python.framework import ops\n",
    "\n",
    "# reset computational graph\n",
    "ops.reset_default_graph()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Obtain and prepare data for modeling"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# name of data file\n",
    "birth_weight_file = 'birth_weight.csv'\n",
    "\n",
    "# download data and create data file if file does not exist in current directory\n",
    "if not os.path.exists(birth_weight_file):\n",
    "    birthdata_url = 'https://github.com/nfmcclure/tensorflow_cookbook/raw/master/01_Introduction/07_Working_with_Data_Sources/birthweight_data/birthweight.dat'\n",
    "    birth_file = requests.get(birthdata_url)\n",
    "    birth_data = birth_file.text.split('\\r\\n')\n",
    "    birth_header = birth_data[0].split('\\t')\n",
    "    birth_data = [[float(x) for x in y.split('\\t') if len(x)>=1] for y in birth_data[1:] if len(y)>=1]\n",
    "    with open(birth_weight_file, \"w\") as f:\n",
    "        writer = csv.writer(f)\n",
    "        writer.writerows(birth_data)\n",
    "        f.close()\n",
    "\n",
    "# read birth weight data into memory\n",
    "birth_data = []\n",
    "with open(birth_weight_file, newline='') as csvfile:\n",
    "     csv_reader = csv.reader(csvfile)\n",
    "     birth_header = next(csv_reader)\n",
    "     for row in csv_reader:\n",
    "         birth_data.append(row)\n",
    "\n",
    "birth_data = [[float(x) for x in row] for row in birth_data]\n",
    "\n",
    "# Pull out target variable\n",
    "y_vals = np.array([x[1] for x in birth_data])\n",
    "# Pull out predictor variables (not id, not target, and not birthweight)\n",
    "x_vals = np.array([x[2:9] for x in birth_data])\n",
    "\n",
    "# set for reproducible results\n",
    "seed = 99\n",
    "np.random.seed(seed)\n",
    "tf.set_random_seed(seed)\n",
    "\n",
    "# Declare batch size\n",
    "batch_size = 90\n",
    "\n",
    "# Split data into train/test = 80%/20%\n",
    "train_indices = np.random.choice(len(x_vals), round(len(x_vals)*0.8), replace=False)\n",
    "test_indices = np.array(list(set(range(len(x_vals))) - set(train_indices)))\n",
    "x_vals_train = x_vals[train_indices]\n",
    "x_vals_test = x_vals[test_indices]\n",
    "y_vals_train = y_vals[train_indices]\n",
    "y_vals_test = y_vals[test_indices]\n",
    "\n",
    "# Normalize by column (min-max norm)\n",
    "def normalize_cols(m):\n",
    "    col_max = m.max(axis=0)\n",
    "    col_min = m.min(axis=0)\n",
    "    return (m-col_min) / (col_max - col_min)\n",
    "    \n",
    "x_vals_train = np.nan_to_num(normalize_cols(x_vals_train))\n",
    "x_vals_test = np.nan_to_num(normalize_cols(x_vals_test))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Define Tensorflow computational graph"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Create graph\n",
    "sess = tf.Session()\n",
    "\n",
    "# Initialize placeholders\n",
    "x_data = tf.placeholder(shape=[None, 7], dtype=tf.float32)\n",
    "y_target = tf.placeholder(shape=[None, 1], dtype=tf.float32)\n",
    "\n",
    "\n",
    "# Create variable definition\n",
    "def init_variable(shape):\n",
    "    return(tf.Variable(tf.random_normal(shape=shape)))\n",
    "\n",
    "\n",
    "# Create a logistic layer definition\n",
    "def logistic(input_layer, multiplication_weight, bias_weight, activation = True):\n",
    "    linear_layer = tf.add(tf.matmul(input_layer, multiplication_weight), bias_weight)\n",
    "    # We separate the activation at the end because the loss function will\n",
    "    # implement the last sigmoid necessary\n",
    "    if activation:\n",
    "        return(tf.nn.sigmoid(linear_layer))\n",
    "    else:\n",
    "        return(linear_layer)\n",
    "\n",
    "\n",
    "# First logistic layer (7 inputs to 7 hidden nodes)\n",
    "A1 = init_variable(shape=[7,14])\n",
    "b1 = init_variable(shape=[14])\n",
    "logistic_layer1 = logistic(x_data, A1, b1)\n",
    "\n",
    "# Second logistic layer (7 hidden inputs to 5 hidden nodes)\n",
    "A2 = init_variable(shape=[14,5])\n",
    "b2 = init_variable(shape=[5])\n",
    "logistic_layer2 = logistic(logistic_layer1, A2, b2)\n",
    "\n",
    "# Final output layer (5 hidden nodes to 1 output)\n",
    "A3 = init_variable(shape=[5,1])\n",
    "b3 = init_variable(shape=[1])\n",
    "final_output = logistic(logistic_layer2, A3, b3, activation=False)\n",
    "\n",
    "# Declare loss function (Cross Entropy loss)\n",
    "loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=final_output, labels=y_target))\n",
    "\n",
    "# Declare optimizer\n",
    "my_opt = tf.train.AdamOptimizer(learning_rate = 0.002)\n",
    "train_step = my_opt.minimize(loss)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Train model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Loss = 0.627377\n",
      "Loss = 0.592997\n",
      "Loss = 0.536253\n",
      "Loss = 0.563936\n",
      "Loss = 0.559027\n",
      "Loss = 0.543379\n",
      "Loss = 0.542254\n",
      "Loss = 0.455679\n",
      "Loss = 0.468751\n",
      "Loss = 0.498024\n"
     ]
    }
   ],
   "source": [
    "# Initialize variables\n",
    "init = tf.global_variables_initializer()\n",
    "sess.run(init)\n",
    "\n",
    "# Actual Prediction\n",
    "prediction = tf.round(tf.nn.sigmoid(final_output))\n",
    "predictions_correct = tf.cast(tf.equal(prediction, y_target), tf.float32)\n",
    "accuracy = tf.reduce_mean(predictions_correct)\n",
    "\n",
    "# Training loop\n",
    "loss_vec = []\n",
    "train_acc = []\n",
    "test_acc = []\n",
    "for i in range(1500):\n",
    "    rand_index = np.random.choice(len(x_vals_train), size=batch_size)\n",
    "    rand_x = x_vals_train[rand_index]\n",
    "    rand_y = np.transpose([y_vals_train[rand_index]])\n",
    "    sess.run(train_step, feed_dict={x_data: rand_x, y_target: rand_y})\n",
    "\n",
    "    temp_loss = sess.run(loss, feed_dict={x_data: rand_x, y_target: rand_y})\n",
    "    loss_vec.append(temp_loss)\n",
    "    temp_acc_train = sess.run(accuracy, feed_dict={x_data: x_vals_train, y_target: np.transpose([y_vals_train])})\n",
    "    train_acc.append(temp_acc_train)\n",
    "    temp_acc_test = sess.run(accuracy, feed_dict={x_data: x_vals_test, y_target: np.transpose([y_vals_test])})\n",
    "    test_acc.append(temp_acc_test)\n",
    "    if (i+1)%150==0:\n",
    "        print('Loss = ' + str(temp_loss))\n",
    "        "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Display model performance"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n5f78GjVqpDxDL8mNdqm2dfbZZ8d9/kCfPn2S1keICEOHDk07jjCoatIbFk16duzYEfNMhoxIJ3Nk\n05ArVwpBuGcKmVJUVKRbt24t121+9tlnunHjRn/cu1LwHm3p8d5b8AzIm9alSxd/mtct89q1a2PW\n9x4LGdS0aVN/eW97wW6jVVX/85//KKBdu3b11xs9erQOHTpUVVVnzJgRc7b2yCOPaJcuXRSIuYqJ\nHoJdpQffV7xBVeP2/FlcXJx03by8vKx/7Os+++yT8v17g/foSxviD4cffngJf4kRv5W0rhTi1yaa\nrPL5559HnMWWt2rVqkVUMpeHkjbBDFZsf/TRRzzzzDN+Fx3gXDn95S9/ibkb+7PPPov7CE2vDD/6\n3o6g4P0Snquuusp/rYGWXW+99RaHH344zZo1o2PHjrz55pu0b9+e3/72t7z33nsR2x0/fjxNmzbl\nnHPO4eOPP077isL7DGrWrOk/ASxeXVH79u355ptv/PeQqh4GnEeKBh+IA8SNPRO8z3Ht2rV88MEH\n/PnPf0647O9+9zteeeWVjMdUWQU7BcyYdDJHNg25eKVQFaS6Uihv9erVU0B/+uknfx/BegJV1S+/\n/FIBve666+JuY+rUqSnju+yyy2LO5hKJXi56nZUrVyqg1atXj9nWSy+95E8LXlHUqFEj5baBuFc9\nwSundIb99tsv5TI//PBDzLRatWr57yPe8wm8oUWLFrp582bt06dPieKqVatW6GfwEPnAoUwN3rMb\nSgOrUzDZxHvcY4MGDSpkf97ZaLD1VnQz2yOOOII5c+bwj3/8I+420un3pjT3VWzevDluF+RefBq4\nQvEEr4aaNWvmX31EX0moKr17945Z/6CDDorpxrtu3brceeed9OzZM26cL7/8Mtdeey0DBw5k3Lhx\nMY/sjHbrrbfG7aYkeCUW770BfPnll3zwwQfUr1+fSZMmlahTuZYtW6a9bDwlud8knnPPPRdI/N7K\nU6Km4uUqncyRTYNdKVROu3fv1ieeeMIvI/dceeWV2qhRo4zsz6t/wD3L8lpFNWvWLK1tPPnkkwpo\nnTp1Ei4zePDguGf98dx2223ap08fP77hw4dHrLNhwwYFp54geluff/65P23nzp26fPlyBbR27doR\n71FVtXfv3jExeXU28eKcOXOmAtqxY8eIK4roVmhHH310xPpnn322/3rmzJmqqhGP9/SufPr27etv\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x11047b128>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\nCRMmkJCQQGJiIl9++SUbN27Mtc2xY8e4+uqrSUxM5PLLL2fq1Km51nnggQcYPnw411xzDePHj2f/\n/v0ALFiwgD179rBs2TLWrFnDDz/8wA8//MCECRO4+OKLWbNmTa6EADBnzhz69etH27ZtqVq1KomJ\niQDMnz+fhQsXsnz5chITE3n00UcBGDJkCI888giJiYn88MMPuZJWXho0aMDq1au57bbbuO2221ix\nYgWJiYm0atWKadOmAXD//fdz7bXXsnbtWlauXEm7du246667mO6OBpmZmclHH33Eb3/7W/++AD/Z\nlYK/3Cean73gAnbu3EmVKlVCHZExBSrOL/pgatWqFXFxcd75mTNn8vbbb5ORkcEvv/zCxo0bad++\nfbZtoqOjueGGGwDo1q0b3333Xa799u3bl+3bt7No0SIWLlxIly5d2LBhA4sXL/bOA6SmpvLTTz8V\netKeOXMmjz/+OACDBw9m5syZdO7cmSVLlnDXXXcRHR0NQJ06dTh69CjJyckMGDAAcB4c88ftt9/u\nnV67di3PPPMMKSkpnDhxgv79+wPw9ddfM2vWLMDppr9GjRrUqFGD6tWrs27dOnbv3k337t2pXbu2\nX8f0lyUFf7nVR9siIvgJiKlTJ9QRGVOuVK1a1Tu9detWXnvtNZYvX06tWrUYOnRonk9he9ohwOmq\nPr86+Lp163LHHXdwxx13EB8fz/fff4+qMnbsWO6+++5s6xbUeJyUlMQ333zDpk2bEBEyMjKIiIjg\nb3/7W5Hea3h4eLZ2k5zvzfezGDZsGAsXLuSSSy7hrbfeYunSpd5led1eevfddzNt2jR27drF7373\nuyLF5Q+rPvLXkCHw6qsMEuEaYPHixaGOyJhy6/jx41SvXp0aNWqwf/9+vvjii2Lv66uvviI9Pd27\n3507d9K0aVOuv/563n77bdLS0gDnae/k5GSqV6/OiRMn8tzXRx99xF133cXu3bvZtWsX+/bto3Hj\nxvz4449ce+21TJ061XusI0eOULt2berXr8/8+fMB5+R/8uRJmjVrxoYNGzhz5gxHjx7lP//5T77x\np6Wl0ahRI86ePcv777/vLe/du7e3QTwzM5Pjx48DMHDgQObPn8+aNWvo06dPsT+3/FhS8FfPnjBs\nGHfv2cO4Bg1o165dqCMyptzq2rUr7du3p23btgwbNowrrrii2PtasWIFXbt2pVOnTvTs2ZP77ruP\nLl260LdvXwYNGsRll11Gx44d+c1vfkNqaioNGzakW7dudOzYkSeeeCLbvmbOnMktt2R/PHXgwIHM\nnDmT/v37Ex8fT1xcHLGxsfzzn/8E4L333uMf//gHnTp14sorryQpKYkWLVpw880306FDBwYPHkzX\nrl3zjf/555/n0ksv5YorrshWfTZx4kS++OILOnbsSFxcHJs3bwacKqqrrrqKIUOGBGVMF1HVgO80\nmOLi4jTBHfmsVP38M2zZwt6+fdleuza93MYsY8qSTZs22Q+WCi4rK4vY2Fjmzp1Ly5Yt81wnr38H\nIrJSVePy3MCHXSn465134Ne/5sLTpzlj3WYbY0Jg3bp1tGrVivj4+HwTQknZ2c1fo0ZBzZq8/Pe/\ns6VNG64LdTzGmPNOx44d2blzZ1CPYVcK/mrQAMaM4d9165JUo0aoozHGmKCwpFBEWVlZhIWFhToM\nY4wJiqAmBRGJF5EtIrJNRJ7IY/lNIrJWRNaISIKIXBnMeIpr//79zJs3j0WLFrFp06agtPgbY0xZ\nELQ2BREJA94ErgX2AStEZJ6q+j7L/hUwT1VVRDoBHwJtgxVTcY0ePZp58+Z558+etY4ujDEVUzB/\n8nYHtqnqDlU9A8wCbvJdQVVT9dw9sVWBMnl/7C+//EJkZKR33vMQiTEmu0B0nQ0wdepUDhw4kOey\n//3vf/To0YPY2FjatWvHX/7ylwL3tWrVKhYtWlTgOg888ABNmzalvN2iHwzBvPuoCbDXZ34f0CPn\nSiJyC/A3oAHQL68dicgoYBRA06ZNAx5oQebPn09CQgKtWrVi+/btAKSkpJRqDMaUF56uswGeffZZ\nqlWrxmOPPVbk/UydOpWuXbvSqFGjXMuGDx/O3LlzueSSS8jMzCx07IVVq1axfv164uPj81yemZnp\n7X30+++/51e/+lWR4/WHqqKqZb76OeTRqeocVW0L3AzkmfJVdYqqxqlqXP369Us1vqFDhwJke+LS\n0/mVMWVer165Xy+/XPzlJTB9+nS6d+9ObGwsv//978nKyiIjI4M777yTjh07cskll/D666/zwQcf\nsGbNGm6//fY8rzCSkpK8ySIsLMz7FHBqaiojRoyge/fudOnShfnz55Oens7zzz/Pe++9R2xsLB9/\n/HGuuL766iu6dOnCqFGjso2fcOLECYYPH06nTp3o1KmTtxvszz//nK5du9K5c2euu865OX3s2LHZ\nOiBs27Yt+/btY9u2bbRv35477riDDh06sH//fkaNGkVcXBwdOnTg+eef926zbNkyLr/8cjp37kyP\nHj04efIkPXv2ZP369d51LrvsMjZs2FCi76EwwbxS+Bm40Gc+xi3Lk6p+KyItRaSeqiYHMa4iOXny\nJI899hj33nsvM2bMAOC5554LcVTGlC/r169nzpw5/PDDD4SHhzNq1ChmzZpFq1atSE5OZt26dYBz\nFV6rVi3eeOMNJk6cSGxsbK59Pfzww7Rp04bevXtzww03MGzYMCIjI3n++eeJj49n2rRpHD16lB49\nenh7IF2/fn2+vcbOnDmTIUOGEB8fz7hx43j99dcJDw/n2WefpX79+qxduxZVJSUlhQMHDnDffffx\n3Xff0axZM44cOVLoe9+8eTMzZszw9hA7YcIE6tSpQ0ZGBr1792bQoEG0bNmSwYMHM3v2bLp27cqx\nY8eIjIz0dn738ssvs3HjRlSVDh06lOCbKFwwk8IKoI2ItMBJBoOBbB1/i0hrYLvb0NwViAQOByOY\npUuXFrkr4YyMDDIyMoiKivJ2l2tMufL118Fd7qclS5awYsUK74kxPT2dCy+8kOuvv54tW7bw4IMP\n0q9fP+8v74I899xz3HnnnSxevJgZM2bwwQcfsGTJEm9X2Z4xEk6dOsWePXsK3Nfp06f54osvmDhx\nIlWrVqVr164sWbKE+Ph4lixZ4r06EBFq167NnDlz6N27N82aNQOc7rML40+X4adPn6Zp06bePpJq\n1qwJOF1sd+nShQkTJjB16lRGjhxZ6PFKKmhJQVUzROQB4AsgDJiqqhtEZLS7fDIwEBgmImeBdOB2\nDVJLT0pKSpFHofI0dG3fvp1GjRrRu3dvunfvHozwjKnQVJW77rorz0bhtWvXsnDhQt58801mz57N\nlClTCt1f69atad26Nffccw/16tXj2LFjqCpz586lVatW2db99ttv893PggULOHbsmPfXd1paGrVr\n1863/SE/BXWVXZwuwz2qVatGr169mDdvHrNnzw74SHp5CWo3F6q6AFiQo2yyz/Tfgb8HMwaP+Ph4\nby+D/po9ezaDBg3i1KlTREREFNj9rTEmf3369GHQoEE89NBD1KtXj8OHD5OWlkZ0dDRRUVHcdttt\ntGnThnvuuQegwO6tP//8c/r27YuIsHXrViIjI6levTrXX389b7zxhrdGYPXq1XTp0qXAfc2cOZNp\n06Zx2223AU47QqtWrTh16hTXXnstb775Ji+//LK3+qhnz5489NBD7N6921t9VKdOHZo3b86XX34J\nwPLly9m7d2+ex8ury/D4+Hjat2/Pnj17WLVqFV27duX48eNUrVqVsLAw7rnnHm655RZ69+7tvYII\nppA3NJdl1atXByjzdwsYU9Z17NiRcePG0adPHzp16sR1113HwYMH2bt3L1dddRWxsbGMHDmS8ePH\nAzBy5EjuueeePBuap02bRtu2bYmNjWXEiBG8//77VKpUiXHjxpGWlkbHjh3p0KEDzz77LADXXHMN\niYmJdOnSJVtDc2pqKkuWLPGO7AbO//nLLruMzz//nHHjxnHw4EEuueQSYmNj+e6772jYsCGTJk3i\npptuonPnztxxxx0A3Hbbbd51p0yZkm9ndfl1GR4ZGcnMmTO57777vA3Yp0+fBqBHjx5UqVKlVKqO\nwLrOLlBmZiZPP/00Dz74YJ63xhlT1ljX2RXP3r17ufbaa72jwfnDus4OkrCwMMaPH28JwRgTEu+8\n8w49e/Zk/PjxfieEkrKus40xpowaOXJkqVUbediVgjEVTHmrEjaBVdLv35KCMRVIVFQUhw8ftsRw\nnlJVDh8+TFRUVLH3YdVHxlQgMTEx7Nu3j6SkpFCHYkIkKiqKmJiYYm9vScGYCiQiIoIWLVqEOgxT\njln1kTHGGC9LCsYYY7wsKRhjjPEqd080i0gSsLuYm9cDyky33PmwGEuurMcHZT/Gsh4fWIxF1UxV\nCx2QptwlhZIQkQR/HvMOJYux5Mp6fFD2Yyzr8YHFGCxWfWSMMcbLkoIxxhiv8y0pFD56R+hZjCVX\n1uODsh9jWY8PLMagOK/aFIwxxhTsfLtSMMYYUwBLCsYYY7zOm6QgIvEiskVEtonIEyGK4UIR+a+I\nbBSRDSLykFteR0S+FJGt7t/aPtv82Y15i4hcX4qxhonIahH5rKzFKCK1RORjEdksIptE5PKyFJ97\nzEfc73i9iMwUkahQxygiU0XkkIis9ykrckwi0k1E1rnLXpcAjf6ST3wvud/zWhGZIyK1QhVffjH6\nLHtURFRE6oUyxhJT1Qr/AsKA7UBLoDKQCLQPQRwXAF3d6erAT0B74EXgCbf8CeDv7nR7N9ZIoIX7\nHsJKKdY/AO8Dn7nzZSZGYDpwjztdGahVxuJrAuwEot35D4ERoY4RuAroCqz3KStyTMBy4DJAgIXA\nDUGM7zog3J3+eyjjyy9Gt/xC4AucB2vrhTLGkr7OlyuF7sA2Vd2hqmeAWcBNpR2Equ5X1VXu9Alg\nE84J5CacEx3u35vd6ZuAWap6WlV3Attw3ktQiUgM0A94y6e4TMQoIjVx/mO+DaCqZ1Q1pazE5yMc\niBaRcKAK8EuoY1TVb4EjOYqLFJOIXADUUNWl6pzdZvhsE/D4VHWxqma4s0sBT5/QpR5ffjG6/gn8\nCfC9cyckMZbU+ZIUmgB7feb3uWUhIyLNgS7AMqChqu53Fx0AGrrToYr7VZx/4Fk+ZWUlxhZAEvCO\nW731lohULUPxoao/Ay8De4D9wDFVXVyWYvRR1JiauNM5y0vDXTi/qqEMxSciNwE/q2pijkVlJsai\nOF+SQpkiItWA2cDDqnrcd5n7yyFk9wmLSH/gkKquzG+dEMcYjnP5PklVuwBpONUeXmXgM6yN8yux\nBdAYqCoiQ33XCXWMeSmLMXmIyFNABvBeqGPxJSJVgCeBZ0IdS6CcL0nhZ5w6P48Yt6zUiUgETkJ4\nT1U/cYsPupeUuH8PueWhiPsK4EYR2YVTzXaNiLxbhmLcB+xT1WXu/Mc4SaKsxAfQB9ipqkmqehb4\nBOhZxmL0KGpMP3OuCse3PGhEZATQH7jDTVxlKb5WOMk/0f0/EwOsEpFGZSjGIjlfksIKoI2ItBCR\nysBgYF5pB+HeYfA2sElVX/FZNA8Y7k4PBz71KR8sIpEi0gJog9NAFTSq+mdVjVHV5jif039UdWhZ\niVFVDwB7ReRit+jXwMayEp9rD3CZiFRxv/Nf47QflaUYPYoUk1vVdFxELnPf2zCfbQJOROJxqjJv\nVNWTOeIOeXyquk5VG6hqc/f/zD6cm0kOlJUYiyzULd2l9QL64tztsx14KkQxXIlzeb4WWOO++gJ1\nga+ArcASoI7PNk+5MW+hlO9QAHpx7u6jMhMjEAskuJ/jXKB2WYrPPeZzwGZgPfBvnDtQQhojMBOn\njeMszsnr7uLEBMS572s7MBG3Z4QgxbcNp17e8/9lcqjiyy/GHMt34d59FKoYS/qybi6MMcZ4nS/V\nR8YYY/xgScEYY4yXJQVjjDFelhSMMcZ4WVIwxhjjZUnBVHgi0lBE3heRHSKyUkR+FJFbQhRLLxHp\n6TM/WkSGhSIWY/ISHuoAjAkm9+GgucB0Vf2tW9YMuDGIxwzXc5245dQLSAV+AFDVycGKw5jisOcU\nTIUmIr8GnlHVq/NYFgZMwDlRRwJvqur/iUgv4FkgGbgEWAkMVVUVkW7AK0A1d/kIVd0vIl/jPFx1\nJc4DTj8BY3G69j4M3AFE4/T0mYnTqd8YnKedU1X1ZRGJBSbj9Kq6HbhLVY+6+14G9MbpJvxuVf0u\ncJ+SMedY9ZGp6DoAq/JZdjdOD6aXApcC97rdEYDTg+3DOH3itwSucPutegMYpKrdgKnAX332V1lV\n41T1H8D3wGXqdNo3C/iTqu7COen/U1Vj8zixzwAeV9VOwDpgnM+ycFXt7sY0DmOCxKqPzHlFRN7E\n+TV/BmdAlE4iMshdXBOnf5ozOH3U7HO3WQM0B1Jwrhy+dAfKCsPp8sDjA5/pGOADt5O5yjiD7hQU\nV02glqp+4xZNBz7yWcXTeeJKNxZjgsKSgqnoNgADPTOqer87XGICTsd1Y1T1C98N3Oqj0z5FmTj/\nVwTYoKqX53OsNJ/pN4BXVHWeT3VUSXji8cRiTFBY9ZGp6P4DRInIfT5lVdy/XwD3udVCiMhF7oA9\n+dkC1BeRy931I0SkQz7r1uRcd8jDfcpP4AzFmo2qHgOOisiv3KI7gW9yrmdMsNkvDlOhuY3DNwP/\nFJE/4TTwpgGP41TPNMfp/17cZfkOi6iqZ9yqptfd6p5wnFHqNuSx+rPARyJyFCcxedoq5gMfu6N1\njcmxzXBgsjtwyw5gZNHfsTElY3cfGWOM8bLqI2OMMV6WFIwxxnhZUjDGGONlScEYY4yXJQVjjDFe\nlhSMMcZ4WVIwxhjj9f8BtyMpalbVjvIAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1005cd400>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "# Plot loss over time\n",
    "plt.plot(loss_vec, 'k-')\n",
    "plt.title('Cross Entropy Loss per Generation')\n",
    "plt.xlabel('Generation')\n",
    "plt.ylabel('Cross Entropy Loss')\n",
    "plt.show()\n",
    "\n",
    "# Plot train and test accuracy\n",
    "plt.plot(train_acc, 'k-', label='Train Set Accuracy')\n",
    "plt.plot(test_acc, 'r--', label='Test Set Accuracy')\n",
    "plt.title('Train and Test Accuracy')\n",
    "plt.xlabel('Generation')\n",
    "plt.ylabel('Accuracy')\n",
    "plt.legend(loc='lower right')\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
